# -*- coding: utf-8 -*-
# @Time    : 2018/5/24 下午9:17
# @Author  : Lavn
# @Email   : 959875529@qq.com
# @File    : func.py
# @Software: PyCharm

#函数
def sum(v1,v2):
    return v1+v2+1

print(sum(1,2))
print('\n')

#参数 整数是不可变类型
def chagne_number( b ):
    b = 1000

b = 1
chagne_number(b)
print( b )
print('\n')

# 参数是可变类型
def chagne_list( b ):
    print('函数中一开始 b 的值：{}' .format( b ) )
    b.append(1000)
    print('函数中 b 赋值后的值：{}' .format( b ) )


b = [1,2,3,4,5]
chagne_list( b )
print( '最后输出 b 的值：{}' .format( b )  )
print('\n')


#返回值
def sum(num1,num2):
	# 两数之和
	if not (isinstance (num1,(int ,float)) and isinstance (num2,(int ,float))):
		raise TypeError('参数类型错误')
	return num1+num2

print(sum(1,2))
print('\n')
#多个返回值
def  division ( num1, num2 ):
	# 求商与余数
         a = num1 % num2
         b = (num1-a) / num2
         return b , a

num1 , num2 = division(9,4)
tuple1 = division(9,4)

print (num1,num2)
print (tuple1)
print('\n')
#默认参数
def print_user_info( name , age , sex = '男' ):
    # 打印用户信息
    print('昵称：{}'.format(name) , end = ' ')
    print('年龄：{}'.format(age) , end = ' ')
    print('性别：{}'.format(sex))
    return;

# 调用 print_user_info 函数

print_user_info( '两点水' , 18 , '女')
print_user_info( '三点水' , 25 )
print('\n')

#返回值在其他地方改变 尴尬了
def print_info( a , b = [] ):
    print(b)
    return b ;

result = print_info(1)
result.append('error')
print_info(2)
print('\n')

###
def print_info1( a , b = None ):
    print(b)
    if b is None :
        b=[]
    return b;

result = print_info1(1)
result.append('error')

result = print_info1(2)
print('\n')
#关键字参数

def print_user_info( name ,  age  , sex = '男' ):
    # 打印用户信息
    print('昵称：{}'.format(name) , end = ' ')
    print('年龄：{}'.format(age) , end = ' ')
    print('性别：{}'.format(sex))
    return;

# 调用 print_user_info 函数

print_user_info( name = '两点水' ,age = 18 , sex = '女')
print_user_info( name = '两点水' ,sex = '女', age = 18 )
print('\n')

#不定长参数
def print_user_info( name ,  age  , sex = '男' , * hobby):
    # 打印用户信息
    print('昵称：{}'.format(name) , end = ' ')
    print('年龄：{}'.format(age) , end = ' ')
    print('性别：{}'.format(sex) ,end = ' ' )
    print('爱好：{}'.format(hobby))
    return;

# 调用 print_user_info 函数
print_user_info( '两点水' ,18 , '女', '打篮球','打羽毛球','跑步')
print('\n')

#只接受关键字参数
def print_user_info( name , *, age  , sex = '男' ):
    # 打印用户信息
    print('昵称：{}'.format(name) , end = ' ')
    print('年龄：{}'.format(age) , end = ' ')
    print('性别：{}'.format(sex))
    return;

# 调用 print_user_info 函数
print_user_info( name = '两点水' ,age = 18 , sex = '女' )

# 这种写法会报错，因为 age ，sex 这两个参数强制使用关键字参数
# print_user_info( '两点水' , 18 , '女' )
print_user_info('两点水',age='22',sex='男')
print('\n')

#匿名函数
sum = lambda num1 , num2 : num1 + num2;

print( sum( 1 , 2 ) )
print('\n')


#匿名函数问题
num2 = 100
sum1 = lambda num1 : num1 + num2 ;
print( sum1( 1 ) )

num2 = 10000
sum2 = lambda num1 : num1 + num2 ;

print( sum1( 1 ) )
print( sum2( 1 ) )